package org.dromara.app.service;

import jakarta.servlet.http.HttpServletRequest;
import org.dromara.app.appParams.*;
import org.dromara.app.appReturn.AppDaRenInfo;
import org.dromara.app.appReturn.AppOrderInfo;
import org.dromara.app.domain.SkYueDanOrder;
import org.dromara.app.domain.vo.SkYueDanOrderVo;
import org.dromara.app.domain.bo.SkYueDanOrderBo;
import org.dromara.common.core.params.AppTypeName;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 约单订单Service接口
 *
 * @author Evacuation
 * @date 2024-07-23
 */
public interface ISkYueDanOrderService {

    /**
     * 查询约单订单
     *
     * @param id 主键
     * @return 约单订单
     */
    SkYueDanOrderVo queryById(Long id);

    /**
     * 分页查询约单订单列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 约单订单分页列表
     */
    TableDataInfo<SkYueDanOrderVo> queryPageList(SkYueDanOrderBo bo, PageQuery pageQuery);

    /**
     * 查询符合条件的约单订单列表
     *
     * @param bo 查询条件
     * @return 约单订单列表
     */
    List<SkYueDanOrderVo> queryList(SkYueDanOrderBo bo);

    /**
     * 新增约单订单
     *
     * @param bo 约单订单
     * @return 是否新增成功
     */
    Boolean insertByBo(SkYueDanOrderBo bo);

    /**
     * 修改约单订单
     *
     * @param bo 约单订单
     * @return 是否修改成功
     */
    Boolean updateByBo(SkYueDanOrderBo bo);

    /**
     * 校验并批量删除约单订单信息
     *
     * @param ids     待删除的主键集合
     * @param isValid 是否进行有效性校验
     * @return 是否删除成功
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 创建预约下单
     *
     * @param params
     * @param req
     */
    SkYueDanOrder createReservationOrder(AppCreateYueDanParams params, HttpServletRequest req);

    /**
     * 达人订单
     *
     * @param params
     * @param req
     * @return
     */
    List<AppOrderInfo> pendingOrders(AppYueDanParams params, HttpServletRequest req);


    /**
     * 用户创建的达人订单
     *
     * @param params
     * @param req
     * @return
     */
    List<AppOrderInfo> myOrdersList(AppYueDanParams params, HttpServletRequest req);

    /**
     * 支付成功回调
     * @param req
     * @return
     */
    void paymentCallback(HttpServletRequest req);


    /**
     * 用户取消订单
     * @param params
     * @param req
     */
    SkYueDanOrder cencelUserOrder(AppDetailByIdParams params, HttpServletRequest req);

    /**
     * 达人接单
     */
    void getReceivinOrders(AppDetailByIdParams params, HttpServletRequest req);

    /**
     * 达人转单
     * @param params
     * @param req
     */
    void getTransferOrder(AppDetailByIdParams params, HttpServletRequest req);

    /**
     * 筛选的达人信息（消息模块）
     * @param params
     * @param req
     * @return
     */
    List<AppDaRenInfo> getMessageList(AppMessageParams params, HttpServletRequest req);
    /**
     * 浏览历史20条数据
     */
    List<AppDaRenInfo> getBrowsingHistory(HttpServletRequest req);
    /**
     * 预约下单价格计算
     */
    BigDecimal reservationOrderPrice(String dictValue, Long vipType, HttpServletRequest req);


    SkYueDanOrderVo getNewInfo(Long id);


    /**
     * 近半年达人订单男女比例
     * @return
     */
    Map<String,Object> getUserSexSumList();

    Map<String,Object>  getDaRenSexSumList();

    /**
     * 约局订单时间到期后期处理
     * @param
     */
    SkYueDanOrder daoqiOrderInfo(String orderId);

    /**
     * 通过ID查询数据
     * @param s
     * @return
     */
    SkYueDanOrder selectById(String s);

    /**
     * 开始服务
     *
     * @param params
     * @param req
     */
    SkYueDanOrder getStartService(AppDetailByIdParams params, HttpServletRequest req);

    /**
     * 回调
     */
    void getPaymentCallback(Map<String,String> map);

    SkYueDanOrder getOrderById(String out_refund_no);

    void updateByInfo(SkYueDanOrder order);
}
